package com.example.provider.qiniuyun;

import java.io.File;

/**
 * All rights Reserved, Designed By www.maihaoche.com
 *
 * @Package com.example.provider.qiniuyun
 * @author: 红雪（hongxue@maihaoche.com）
 * @date: 2019/1/28 2:01 PM
 * @Copyright: 2017-2020 www.maihaoche.com Inc. All rights reserved.
 * 注意：本内容仅限于卖好车内部传阅，禁止外泄以及用于其他的商业项目
 */
public interface IFileService {


    /**
     * <p> 上传文件 </p>
     * @param file File类型的文件
     * @return APIResult<String> String 可以进行访问/下载的url:域名+文件名
     * @author 红雪 (hongxue@maihaoche.com)
     * @date 2019/1/28 3:17 PM
     *
     */
    APIResult<String> upload(File file);

    /**
     * <p> 指定文件名上传文件 </p>
     * @param file File类型的文件
     * @param fileName 上传在服务器中的文件名
     * @return APIResult<String> String 可以进行访问/下载的url:域名+文件名
     * @author 红雪 (hongxue@maihaoche.com)
     * @date 2019/1/28 3:15 PM
     *
     */
    APIResult<String> upload(File file,String fileName);


    /**
     * <p> 指定文件名，上传字节文件 </p>
     * @param fileBytes byte[]类型的字节
     * @param fileName 上传在服务器中的文件名
     * @return APIResult<String> String 可以进行访问/下载的url:域名+文件名
     * @author 红雪 (hongxue@maihaoche.com)
     * @date 2019/1/28 3:17 PM
     *
     */
    APIResult<String> upload(byte[] fileBytes,String fileName);

    /**
     * <p> 断点续传，适用于大文件传输。文件上传进度信息存储在File文件同级目录下，上传成功后该信息会被删除 </p>
     * @param file File类型的文件
     * @return APIResult<String> String 可以进行访问/下载的url:域名+文件名
     * @author 红雪 (hongxue@maihaoche.com)
     * @date 2019/1/28 3:17 PM
     *
     */
    APIResult<String> uploadResume(File file);

    /**
     * <p> 指定文件名的断点续传，适用于大文件传输。文件上传进度信息存储在File文件同级目录下，上传成功后该信息会被删除 </p>
     * @param file File类型的文件
     * @param fileName 上传在服务器中的文件名
     * @return APIResult<String> String 可以进行访问/下载的url:域名+文件名
     * @author 红雪 (hongxue@maihaoche.com)
     * @date 2019/1/28 3:17 PM
     *
     */
    APIResult<String> uploadResume(File file,String fileName);

    /**
     * <p> 抓取网络资源到空间 </p>
     * @param url 外链的网络资源 如：www.qzone.com/qiniu.png
     * @return APIResult<String> String 可以进行访问/下载的url:域名+文件名
     * @author 红雪 (hongxue@maihaoche.com)
     * @date 2019/1/28 3:36 PM
     *
     */
    APIResult<String> uploadByFecth(String url);

    /**
     * <p> 抓取网络资源到空间 </p>
     * @param url 外链的网络资源 如：www.qzone.com/qiniu.png
     * @param fileName 上传在服务器中的文件名
     * @return APIResult<String> String 可以进行访问/下载的url:域名+文件名
     * @author 红雪 (hongxue@maihaoche.com)
     * @date 2019/1/28 3:36 PM
     *
     */
    APIResult<String> uploadByFecth(String url,String fileName);


    /**
     * <p> 获取上传文件的token，该token不可以覆盖上传 </p>
     * @return APIResult<String> token字符串
     * @author 红雪 (hongxue@maihaoche.com)
     * @date 2019/1/28 3:51 PM
     *
     */
    APIResult<String> getUploadToken();

    /**
     * <p> 获取可以进行下载的url(因为对于私人空间的文件，需要进行验证才能下载) 过期时间为默认时间：1小时 </p>
     * @param url 域名+文件名 形如 http://img.domain.com/hongxue.jpg
     * @return APIResult<String> 返回带有token与时间戳 形如 http://img.domain.com/hongxue.jpg?e=XXXX&token=XXXX
     * @author 红雪 (hongxue@maihaoche.com)
     * @date 2019/1/28 2:47 PM
     *
     */
    APIResult<String> sign(String url);

    /**
     * <p> 获取可以进行下载的url(因为对于私人空间的文件，需要进行验证才能下载) </p>
     * @param url 域名+文件名 形如 http://img.domain.com/hongxue.jpg
     * @param expireInSeconds 该url过期时间，单位 s 秒
     * @return APIResult<String> 返回带有token与时间戳 形如 http://img.domain.com/hongxue.jpg?e=XXXX&token=XXXX
     * @author 红雪 (hongxue@maihaoche.com)
     * @date 2019/1/28 2:47 PM
     *
     */
    APIResult<String> sign(String url,Long expireInSeconds);



}
